#include "paint.h"


void drawFullRect(SDL_Surface * surf,int posX,int posY,int width,int length, int R, int G, int B)
{
    SDL_Rect Rect;
	Rect.x = posX;
	Rect.y = posY;
	Rect.w = width-1;
	Rect.h = length-1;

	SDL_FillRect(surf, &Rect, SDL_MapRGB(surf->format, R, G, B));
}

void drawEmptyRect(SDL_Surface * surf,int posX, int posY, int width, int length, int R, int G, int B)
{
	SDL_Rect ligneHaut;
	ligneHaut.x = posX-1;
	ligneHaut.y = posY-1;
	ligneHaut.w = width;
	ligneHaut.h = 1;

	SDL_FillRect(surf, &ligneHaut, SDL_MapRGB(surf->format, R, G, B));

	SDL_Rect ligneDroite;
	ligneDroite.x = posX+width-1;
	ligneDroite.y = posY-1;
	ligneDroite.w = 1;
	ligneDroite.h = length;

	SDL_FillRect(surf, &ligneDroite, SDL_MapRGB(surf->format, R, G, B));

	SDL_Rect ligneGauche;
	ligneGauche.x = posX-1;
	ligneGauche.y = posY-1;
	ligneGauche.w = 1;
	ligneGauche.h = length;

	SDL_FillRect(surf, &ligneGauche, SDL_MapRGB(surf->format, R, G, B));

	SDL_Rect ligneBas;
	ligneBas.x = posX-1;
	ligneBas.y = posY+length -1;
	ligneBas.w = width;
	ligneBas.h = 1;

	SDL_FillRect(surf, &ligneBas, SDL_MapRGB(surf->format, R, G, B));
}

void dessiner_tt_carre(SDL_Surface * surf,list_carre * lc,int a ,int o,int R,int G, int B,int taille)
{
    carre * c = lc->premier;

    while(c){
        drawFullRect(surf,a + taille * c->abscisse, o + taille * c->ordonner, taille, taille, R, G, B);
        drawEmptyRect(surf,a + taille * c->abscisse, o + taille * c->ordonner, taille, taille, 0, 0, 0);
        c = c->suivant;
    }
}

void dessiner_ttes_pieces (SDL_Surface * surf,list_piece * reserve, list_piece * jouees, int taille, int decal_piece, list_carre *A_eclair,int a_a_eclair ,int o_a_eclair)
{
    int abscisse = 10, ordonner = 100;
    piece * p = jouees->plateau, * p_last = NULL;
    list_carre * lc;
    while (p) {
        dessiner_tt_carre(surf,bonne_rotation(p),p->abscisse,p->ordonner,p->R,p->G,p->B, taille);
        p = p->suivant ;
    }
    if(a_a_eclair > 0){
        dessiner_tt_carre(surf,A_eclair, a_a_eclair ,o_a_eclair,255,255,0,taille);
    }
    p = reserve->plateau;
    while (p) {
        if (p->select == 1) {
            dessiner_tt_carre(surf,bonne_rotation(p),p->abscisse,p->ordonner,p->R,p->G,p->B, taille);
        } else if (decal_piece > 0) {
            decal_piece -= 1;
            p->abscisse = 2000;
            p->ordonner = 1000;
        } else {
            p->abscisse = abscisse ;
            p->ordonner = ordonner ;
            lc = bonne_rotation(p) ;
            ordonner += (lc->hauteur + 1) * taille;
            if (ordonner < 700) {
                dessiner_tt_carre(surf,bonne_rotation(p),p->abscisse,p->ordonner,p->R,p->G,p->B, taille);
                if (p_last == NULL) {
                    p_last = p;
                }
            } else {
                p->ordonner = 1000 ;
            }
        }
        p = p->suivant ;
    }
    if (ordonner < 700) {
        p = reserve->plateau;
        while (ordonner < 700 && p_last != p) {
            if (p->select == 0) {
                p->abscisse = abscisse ;
                p->ordonner = ordonner ;
                lc = bonne_rotation(p) ;
                ordonner += (lc->hauteur + 1) * taille;
                if (ordonner < 700) {
                    dessiner_tt_carre(surf,bonne_rotation(p),p->abscisse,p->ordonner,p->R,p->G,p->B, taille);
                } else {
                    p->ordonner = 1000 ;
                }
            }
            p = p->suivant;
        }
    }
}

void dessiner_fenetre(SDL_Surface * surf, TTF_Font * police, fenetre * fen)
{
     SDL_Surface * print_mes ;
    SDL_Rect * pos = fen->position,* text ;
    SDL_Color color = {0, 0, 0} ;
    text = (SDL_Rect *) malloc (sizeof(SDL_Rect)) ;
    drawFullRect(surf, pos->x, pos->y, pos->w, pos->h, 100, 100, 100) ;
    drawEmptyRect(surf, pos->x, pos->y, pos->w, pos->h, 0, 0, 0) ;
    text->x = pos->x + 100 ;
    text->y = pos->y + 100 ;
    if (fen->true_text) {
        print_mes = TTF_RenderText_Solid(police, fen->true_text, color) ;
        SDL_BlitSurface(print_mes, NULL, surf, text) ;
        SDL_FreeSurface(print_mes) ;
    }
    if (fen->zone_texte) {
        dessiner_fenetre(surf, police, fen->zone_texte) ;
    }
}
